﻿using AexoManager.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using log4net;
using log4net.Config;
using AexoManager.Helpers;
using AexoManager.Datos;
using AexoManager.BussinesLogic;

namespace AexoManager.Controllers
{
    public class PartesController : Controller
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(PartesController));

        #region Accion
        public ActionResult Index()
        {

            //var partes = new BSParte().ObtenerPartes();

            ViewBag.Resultado = null;

            return View("PartesList");
        }

        public ActionResult Nuevo()
        {
            ViewBag.CostosDeParte = null;
            return View("PartesDetalle");
        }

        public ActionResult Modificar(PartesViewModel modelo)
        {
            try
            {
                var unaParte = new BSParte().Get(new Parte { IdParte = modelo.IdParte }, "CostoParte");
                
                
                modelo.Codigo = unaParte.Codigo;
                modelo.Descripcion = unaParte.Descripcion;
                ViewBag.CostosDeParte = unaParte.CostoParte;
            }
            catch (Exception ex)
            {

                log.Error("Ocurrio un error en la presentacion de Guardar", ex);
                ModelState.AddModelError("ErrorMensaje", "Ocurrio un error al registrar esta accion.");
            }
            return View("PartesDetalle", modelo);
        }

        public ActionResult Guardar(PartesViewModel modelo)
        {
            try
            {
                BSParte bsParte = new BSParte();

                if (modelo.IdParte != 0)
                {
                    var unaParte = bsParte.Get(new Parte { IdParte = modelo.IdParte });
                    unaParte.Codigo = modelo.Codigo;
                    unaParte.Descripcion = modelo.Descripcion;

                    bsParte.Update(unaParte);
                }
                else
                {
                    Parte unaParte = new Parte();
                    unaParte.Codigo = modelo.Codigo;
                    unaParte.Descripcion = modelo.Descripcion;

                    bsParte.Save(unaParte);
                }

                BSParte.Confirmar();
            }
            catch (Exception ex)
            {
                log.Error("Ocurrio un error en la presentacion de Guardar", ex);
                ModelState.AddModelError("ErrorMensaje", "Ocurrio un error al registrar esta accion.");
            }

            return RedirectToAction("Index");
        }

        [HttpPost]
        public ActionResult Eliminar(PartesViewModel modelo)
        {
            try
            {
                Parte dtoParte = new Parte { IdParte = modelo.IdParte };
                //dtoParte.IdParte = ;
                new BSParte().Delete(dtoParte);
                BSParte.Confirmar();
            }
            catch (Exception ex)
            {
                log.Error("Ocurrio un error en la presentacion de Eliminar", ex);
                ModelState.AddModelError("ErrorMensaje", "Ocurrio un error al registrar esta accion.");
            }
            return RedirectToAction("Index");
        }

        public ActionResult LoadPartes(jQueryDataTableParamModel param)
        {
            try
            {
                var partes = new BSParte().ObtenerPartes(new Parte { Descripcion = param.sSearch }, param.iDisplayStart, param.iDisplayLength);
                var cantidad = new BSParte().CountPartes(new Parte { Descripcion = param.sSearch });

                var respuestaJson = Json(new
                {
                    sEcho = param.sEcho,
                    iTotalRecords = cantidad,
                    iTotalDisplayRecords = cantidad,
                    aaData = partes
                }, JsonRequestBehavior.AllowGet);

                return respuestaJson;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public string SaveCosto(DateTime fechaDesde, DateTime fechaHasta, double importe)
        {
            return "0";
        }
        #endregion
    }
}
